home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-10-17 | 5.0 KB | 254 lines | [TEXT/CWIE] |
- /* MainMenu.cp */
-
- #include <Types.h>
- #include <Quickdraw.h>
- #include <Controls.h>
- #include <Dialogs.h>
- #include <Events.h>
- #include <Lists.h>
- #include <LowMem.h>
- #include <Menus.h>
- #include <TextEdit.h>
- #include <ToolUtils.h>
-
- #include "Globals.h"
- #include "ResourceDefs.h"
- #include "Miscellany.h"
- #include "AMApp.h"
- #include "AMDoc.h"
- #include "AMEngine.h"
- #include "AMWindow.h"
- #include "MainMenu.h"
-
-
- /*----------*/
- static long GetCommandFromMenu (long menuChoice);
- static void DoApple (short itemNr);
- static void Enable (short itemNr,
- Boolean enabled);
- static void EnableTitle (MenuHandle menu,
- Boolean enabled);
-
- /*----------*/
- void InitTitles (void)
- {
- } /*InitTitles*/
-
- /*----------*/
- void LoadMenus (void)
- {
- AppleMenu = GetMenu (MENU_Apple);
- FailNilResource ((Handle)AppleMenu);
- AppendResMenu (AppleMenu, 'DRVR');
- FileMenu = GetMenu (MENU_File);
- EditMenu = GetMenu (MENU_Edit);
- RemindMenu = GetMenu (MENU_Remind);
-
- InsertMenu (AppleMenu, 0);
- InsertMenu (FileMenu, 0);
- InsertMenu (EditMenu, 0);
- InsertMenu (RemindMenu, 0);
-
- DrawMenuBar ();
- } /*LoadMenus*/
-
- //----------
- long GetCommandFromMenu (
- long menuChoice)
- {
- long commandID = 0;
-
- switch (menuChoice) {
- case cAppleAbout:
- commandID = cmdAbout;
- break;
- case cFileNew:
- commandID = cmdNew;
- break;
- case cFileOpen:
- commandID = cmdOpen;
- break;
- case cFileClose:
- commandID = cmdClose;
- break;
- case cFileSave:
- commandID = cmdSave;
- break;
- case cFileSaveAs:
- commandID = cmdSaveAs;
- break;
- case cFileRevert:
- commandID = cmdRevert;
- break;
- case cFilePageSetup:
- commandID = cmdPageSetup;
- break;
- case cFilePrint:
- commandID = cmdPrint;
- break;
- case cFileQuit:
- commandID = cmdQuit;
- break;
- case cEditUndo:
- commandID = cmdUndo;
- break;
- case cEditCut:
- commandID = cmdCut;
- break;
- case cEditCopy:
- commandID = cmdCopy;
- break;
- case cEditPaste:
- commandID = cmdPaste;
- break;
- case cEditClear:
- commandID = cmdClear;
- break;
- case cEditSelectAll:
- commandID = cmdSelectAll;
- break;
- case cEditShowClipboard:
- commandID = cmdShowClipboard;
- break;
-
- default:
- commandID = -menuChoice;
- }
-
- return commandID;
- }
-
- //----------
- void DoApple (
- short itemNr)
- {
- Str255 name;
- short refNum;
-
- GetMenuItemText (AppleMenu, itemNr, name);
- refNum = OpenDeskAcc (name);
- }
-
- /*----------*/
- void DoMenu (
- long menuChoice)
- {
- long commandID;
- AMDoc* curDoc;
- short menuID;
- short itemNr;
-
- commandID = GetCommandFromMenu (menuChoice);
- curDoc = cur->mDoc;
- if (cur->DoCommand (commandID)) {
- // cur window handled it
- } else if ((curDoc != nil)
- && (curDoc->DoCommand (commandID))) {
- // document handled it
- } else if (gApplication->DoCommand (commandID)) {
- // application handled it
- } else {
- menuID = HiWord (menuChoice);
- itemNr = LoWord (menuChoice);
- if (menuID == MENU_Apple) {
- DoApple (itemNr);
- }
- }
-
- HiliteMenu (0);
- } /*DoMenu*/
-
- /*----------*/
- MenuHandle menu;
- Boolean menuBarChanged;
-
- /*----------*/
- static void Enable (short itemNr,
- Boolean enabled)
- {
- if (enabled) {
- EnableItem (menu, itemNr);
- } else {
- DisableItem (menu, itemNr);
- }
- } /*Enable*/
-
- /*----------*/
- static void EnableTitle (MenuHandle menu,
- Boolean enabled)
- {
- if (enabled != ((**menu).enableFlags & 1)) {
- menuBarChanged = true;
- }
- if (enabled) {
- EnableItem (menu, 0);
- } else {
- DisableItem (menu, 0);
- }
- } /*EnableTitle*/
-
- /*----------*/
- void UpdateMenus (void)
- {
- WindowPeek frontPeek;
- Boolean isFront; /*is there a front window?*/
- Boolean isCur; /*is there a current window?*/
- Boolean isCurDoc; /*is there a current document?*/
- Boolean isDirty; /*is it dirty?*/
- Boolean hasFile; /*does it have a file?*/
- Boolean isSelected; /*is anything selected?*/
- Boolean isDesk; /*is the front window a desk acc?*/
- Boolean isText; /*is there a current text field?*/
- Boolean isScrap; /*is there any scrap?*/
- menuBarChanged = false;
-
- isFront = (FrontWindow () != nil);
- isCur = (curWindow != nil);
- isDirty = false;
- hasFile = false;
- isSelected = false;
- isCurDoc = (cur->mDoc != nil);
- if (isCurDoc) {
- isDirty = cur->mDoc->mEngine->IsDirty ();
- hasFile = cur->mDoc->mEngine->HasFile ();
- }
-
- isDesk = false;
- if (isFront) {
- frontPeek = (WindowPeek) FrontWindow ();
- isDesk = (frontPeek->windowKind < 0);
- }
-
- TEHandle curTE = cur->GetCurTE ();
-
- isText = (curTE != nil);
- isScrap = false;
- if (isText) {
- isSelected = ((**curTE).selStart != (**curTE).selEnd);
- isScrap = (TEGetScrapLength () > 0);
- }
-
- menu = FileMenu;
- Enable (cFileClose, isFront);
- Enable (cFileSave, isDirty);
- Enable (cFileSaveAs, isCur);
- Enable (cFileRevert, isDirty);
-
- menu = EditMenu;
- if (isFront) {
- Enable (cEditUndo, isDesk);
- Enable (cEditCut, isDesk || isSelected);
- Enable (cEditCopy, isDesk || isSelected);
- Enable (cEditPaste, isDesk || isScrap);
- Enable (cEditClear, isDesk || isSelected);
- Enable (cEditSelectAll, isText);
-
- }
- EnableTitle (EditMenu, isFront);
-
-
- if (menuBarChanged) {
- DrawMenuBar ();
- }
- } /*UpdateMenus*/
-